package com.taotao.manager.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

import com.taotao.pojo.TbContentCategory;

@Service
public class ContentCategoryService extends BaseService<TbContentCategory> {
	
	   public void saveContentCategory(TbContentCategory contentCategory) {
	        // 设置初始数据
	        contentCategory.setId(null);
	        contentCategory.setIsParent(false);
	        contentCategory.setSortOrder(1);
	        contentCategory.setStatus(1);

	        super.save(contentCategory);

	        // 判断该节点的父节点的isParent是否为true，如果不是，修改为true
	        TbContentCategory parent = super.queryById(contentCategory.getParentId());
	        if (!parent.getIsParent()) {
	            parent.setIsParent(true);
	            super.updateSelective(parent);
	        }
	    }

	    public void updateContentCategory(TbContentCategory contentCategory) {
	        // 设置不能更新的字段为null
	        contentCategory.setCreated(null);
	        contentCategory.setIsParent(null);
	        contentCategory.setParentId(null);
	        contentCategory.setSortOrder(null);
	        contentCategory.setStatus(null);
	        super.updateSelective(contentCategory);
	    }

	    /**
	     * 删除节点<br>
	     * 	1、删除所有子节点（递归查找）<br>
	     * 	2、判断是否存在兄弟节点，设定父节点的isParent属性<br>
	     * <p>Title: deleteContentCategory</p>
	     * <p>Description: </p>
	     * @param contentCategory
	     */
	    public void deleteContentCategory(TbContentCategory contentCategory) {
	        List<Object> ids = new ArrayList<Object>();// 定义集合用于收集待删除的id
	        ids.add(contentCategory.getId());

	        // 根据当前节点的id查询所有的子节点（使用递归）
	        findAllSubNode(ids, contentCategory.getId());

	        // 删除数据
	        super.deleteByIds(TbContentCategory.class, "id", ids);

	        // 判断当前节点是否还有同级节点，如果没有，修改父节点的isParent为false
	        TbContentCategory record = new TbContentCategory();
	        record.setParentId(contentCategory.getParentId());
	        List<TbContentCategory> list = super.queryListByWhere(record);
	        if (list == null || list.isEmpty()) {
	            // 没有其他的同级节点
	        	TbContentCategory parent = new TbContentCategory();
	            parent.setId(contentCategory.getParentId());
	            parent.setIsParent(false);
	            super.updateSelective(parent);
	        }
	    }

	    private void findAllSubNode(List<Object> ids, Long parentId) {
	        TbContentCategory record = new TbContentCategory();
	        record.setParentId(parentId);
	        List<TbContentCategory> list = super.queryListByWhere(record);
	        for (TbContentCategory contentCategory : list) {
	            ids.add(contentCategory.getId());
	            // 判断该节点是否还有子节点
	            if (contentCategory.getIsParent()) {
	                // 开始递归
	                findAllSubNode(ids, contentCategory.getId());
	            }
	        }
	    }
}
